Dans cette seconde partie de la section dédiée à la vidualisation de données vous allez: - Changer l’apparence des graphiques - Combiner plusieurs graphiques dans une même figure - Inclure du dynamisme et de l’interactivité à vos graphique - Apprendre les meilleures pratique pour visualiser des données
Avant de rentrer dans le vif du sujet il nous faut mettre en place notre environnement de travail. Créez un nouveau script R et:
library(tidyverse)
session3_plots_manipulation:setwd("~/Desktop/2021_L3_R/session3_plots_manipulation/")
expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## genotype = col_character(),
## background = col_character(),
## temperature = col_double(),
## fluctuation = col_character(),
## day.length = col_double(),
## vernalization = col_character(),
## survival.bolt = col_character(),
## bolt = col_character(),
## days.to.bolt = col_double(),
## days.to.flower = col_double(),
## rosette.leaf.num = col_double(),
## cauline.leaf.num = col_double(),
## blade.length.mm = col_double(),
## total.leaf.length.mm = col_double(),
## blade.ratio = col_double()
## )
Nous sommes maintenant prêt!
Tous les élépments d’un ggplot sont modifiables. Les themes permettent de modifier l’apparence du graphique. Voici quelques exemples.
# Example de thèmes existants dans ggplot2
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_bw() +
labs(title = "Black and white theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_classic() +
labs(title = "Classic theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Minimal theme")
La fonction theme() peut être utilisée pour modifier des éléments en particulier du graphique. Il y a tellement de possibilités que le mieux est de rechercher sur internet la modification que vous voulez faire.
Par exemple, en recherchant “vertical labels x axis ggplot2” nous obtenons cette solution:
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Rechercher “altering plot colours ggplot2” donne ceci, qui apporte cette solution:
ggplot(expt1, aes(genotype, days.to.flower, fill = fluctuation)) +
geom_boxplot() +
scale_fill_brewer(palette="Dark2")
Parfois nous voulons crée une figure contenant plusieurs graphiques, c’est le cas dans la plupart des articles scientifiques.
Par exemple le graphique que vous avez reproduit hier correspond aux panels B et C d’une figure de Burghard et al 2015
Nous allons faire quelque chose de similaire avec un scatterplot en panel A, et des boxplots en panel B.
Pour cela nous allons utiliser la fonction ggarrange() qui est dans le packqge ggpubr.
Tout d’abord, nous devons charger cette librarie dans R:
library(ggpubr)
Ensuite, faisons chaque graphique indépendament et sauvons les dans un objet:
panelA <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point()
panelB <- ggplot(expt1, aes(genotype, days.to.bolt, fill = fluctuation)) +
geom_boxplot() +
facet_grid(. ~ temperature) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Nous pouvons maintenant utiliser la fonction grid.arrange() pour combiner les graphiques ensemble:
ggarrange(panelA, panelB, nrow=2, labels =c("A", "B"),heights = c(1.5, 2))
Si nous postons les graphiques en ligne, cela peut apporter un plus d’inclure une animation dans le graphique, à condition que cela apporte des informations supplémentaire. C’est possible avec le package gganimate!
Tout d’abord, chargeons le package gganimate:
library(gganimate)
Pour créer une animation, il faut utiliser la fonction transition_states() à notre graphique (avec un +)
ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
transition_states(states = genotype, wrap = FALSE, transition_length = 1, state_length = 3) +
ease_aes('linear') +
labs(subtitle = "{closest_state}")
L’animation peut ensuite être sauvée en utilisant la fonction anim_save()
Pour aller plus loin, il est même possible de créer des graphiques intéractifs en utilsant le package plotly.
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
Il faut d’abord mettre le graphique dans un objet, puis utiliser cet objet dans la fonction ggplotly().
# Mettre le graphique dans l'objet p1
p1 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
facet_wrap(~genotype)
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p1)
Plutôt que d’avoir un graphique par génotype, il est possible d’ajouer un curseur pour montrer les données des génotypes de manière interaction en utilisant l’argument ‘frame’:
# Mettre le graphique dans l'objet p1
p2 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation, frame=genotype)) +
geom_point()
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p2)
pie chart
barplot
boxplot, violin plot ou point?
Axes coupés ou qui ne commencent pas à zero
Comment faire ressortir le message des données
ordonner les données
Eviter de mettre trop d’info dans un graph
Bien utiliser les couleurs (+ palette daltoniens)